"""
函数装饰器
    定义：
        在不改变原函数的调用以及内部代码情况下，为其添加新功能的函数
    语法:
         def 函数装饰器名称(func):
            def wrapper(*args, **kwargs):
                需要添加的新功能
                res = func(*args, **kwargs)
                return res
            return wrapper

        @ 函数装饰器名称
        def 原函数名称(参数):
            函数体

        原函数(参数)
"""

# 闭包写法
# def func1():
#     print('旧功能')
#
# def new_func(func):
#     def wrapper(*args, **kwargs):
#         print('需要添加的新功能')
#         res = func(*args,**kwargs)
#         return res
#
#     return wrapper
#
# func1 = new_func(func1)
# func1()
# func1()

# 装饰器的写法

def new_func(func):
    def wrapper(*args, **kwargs):
        print('需要添加的新功能')
        res = func(*args,**kwargs)
        return res

    return wrapper

@new_func
def func1():
    print('旧功能')

func1()